package book;

public class SeqList implements MyList {
	final int defaultSize = 10;   //默认线性表长度
	int maxSize;                  //线性表长度
	int size;                     //线性表中现有的元素个数
	Object[] listArray;           //用对象数组存储线性表
	//无参构造方法
	SeqList(){
		initiate(defaultSize);
	}
	
	//带线性表长度的构造方法
	SeqList(int size){
		initiate(size);
	}
	//初始化方法：设置线性表长度、现有元素个数和初始化对象数组（用线性表长度）
	

	private void initiate(int sz) {
		maxSize = sz;
		size=0;
		listArray = new Object[sz];
		
	}
	

	//实现在指定位置插入数据元素
	public void insert(int i, Object obj) throws Exception {
		if(size==maxSize) {
			throw new Exception("线性表已满，无法插入！");
			
			
		}
		//只允许在现有线性表数据之前或之后插入，不允许在一个空位置之后插入数据元素
		if(i>size) {
			throw new Exception("插入下表位置错误！");
		}
		//将插入为之后的数据元素全部后移
		for(int j =size;j>i;j--){
			listArray[j]=listArray[j-1];
		}
		//插入数据元素，并增加线性表中现有元素个数
		listArray[i]=obj;
		size++;
	}

	//实现删除指定下标位置的数据元素
	public Object delete(int i) throws Exception {
		if(size==0) {
			throw new Exception ("线性表已空，无法删除！");
			
		}
		if(i>size-1) {
			throw new Exception ("删除下表位置错误！");	
		}
		//获取被删除的数据元素
		Object it  =listArray[i];
		//将删除位置后的数据元素全部前移
		for(int j =i;j<size-1;j++) {
			listArray[j]=listArray[j+1];
		}
		//返回被删除数据元素，并减少线性表中现有元素个数
		size--;
		return null;
	}

	//实现替换指定下标位置的数据元素
	public void update(int i, Object obj) throws Exception {
		if(size==0) {
			throw new Exception ("线性表已空，无法替换！");
		}
		if(i>size-1) {
			throw new Exception ("替换下标位置错误！");
		}
		//替换指定下标的数据元素
		listArray[i]=obj;
		
	}

	//实现获取指定下标位置的数据元素
	public Object getData(int i) throws Exception {
		if(size==0) {
			throw new Exception ("线性表已空，无法获取！");
			
		}
		if(i>=size) {
			throw new Exception ("获取下标位置错误！");
		}
		return listArray[i];
	}

	//实现获取线性表数据元素个数
	public int size() {
		
		return size;
	}

	//实现判断线性表是否为空
	public boolean isEmpty() {
		
		return size==0;
	}

	                                                                                                                                                                                                                                                                                                                                                                                                                                        
	
}
